package C9_2_ConsolidateConditionalExpression;


/**
 * @author xugang1
 * @updated 2022/7/25
 * @description 合并条件表达式
 */

public class ConsolidateConditionalExpression {

    /**
     * 特点：检查条件不同，最终结果相同
     * 重构方法：“逻辑或”和“逻辑与”
     * tips:确保条件语句没有副作用
     */



    /**
     * 重构前（逻辑或）
     */
    public double test1()
    {
        if (_seniority < 2) return 0;
        if (_monthsDisabled > 12) return 0;
        if (_isPartTime) return 0;
    }

    /**
     * 重构后（逻辑或）
     */
    public double test2()
    {
        if((_seniority < 2) ||(_monthsDisabled > 12) || (_isPartTime)) return 0;
    }


    /**
     * 二次重构后（逻辑或）
     */
    public double test3(){
        if(isNotEligibleForDisability()) return 0;
    }
    boolean isNotEligibleForDisability(){
        return (_seniority < 2) ||(_monthsDisabled > 12) || (_isPartTime);
    }


    ==========================================================================



    /**
     * 重构前（逻辑与）
     */
    public double test4() {
        if(onVacation())
            if(lengthOfService() > 10)
                return 1;
        return 0.5;
    }

    /**
     * 重构后（逻辑与）
     */
    public double test5(){
        if(onVacation() && lengthOfService() > 10)return 1;
        return 0.5;
    }

    /**
     * 二次重构后（逻辑与）
     */
    public double test6(){
        if(onVacationlengthOfService()) return 1;
        return 0.5;
    }
    boolean onVacationlengthOfService(){
        return onVacation() && lengthOfService() > 10;
    }

    /**
     * 三次重构后（逻辑与）
     */
    public double test7(){
        return onVacationlengthOfService() ? 1 : 0.5;
    }
    boolean onVacationlengthOfService(){
        return onVacation() && lengthOfService() > 10;
    }
}